package com.lancoo.ccas53.arrangecourse.entities;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

/**
 * @author FortySun
 * @Description 一个课时的课程
 * @Date 2023-01-05 16:43
 */
@Data
@NoArgsConstructor
@RequiredArgsConstructor
public class ClassHour {
    /**
     * 备注：此处是浅拷贝，存在数据不一致的问题
     *
     * @param cloneable
     */
    public ClassHour(ClassHour cloneable) {
        this.courseUnit = new CourseUnit(cloneable.getCourseUnit());
        this.timeslotRoom = new TimeslotRoom(cloneable.getTimeslotRoom());
    }

    @NonNull
    //排课单元
    private CourseUnit courseUnit;
    //教室课程分组信息
    private TimeslotRoom timeslotRoom;


    //用来记录教室使用冲突，即两个不同的课程，同时间安排在了同一个教室
    //发生冲突的时候，冲突的两个ClassHour对象，都会记录，
    // 这样遍历到对方的时候，可以跳过这个检测，减少重复计算，提升冲突的计算效率
    private boolean isRoomClash;
    //用来记录教师冲突：相同的时间，教师要上多节课
    //发生冲突的时候，冲突的两个ClassHour对象，都会记录，
    // 这样遍历到对方的时候，可以跳过这个检测，减少重复计算，提升冲突的计算效率）
    private boolean isTeacherClash;
    //用来记录学生冲突，相同的时间，学生要上多节课
    //发生冲突的时候，冲突的两个ClassHour对象，都会记录，
    // 这样遍历到对方的时候，可以跳过这个检测，减少重复计算，提升冲突的计算效率
    private boolean isStudentClash;
}
